#include<cgic.h>
#include"data_global.h"
/*

采用消息队列的形式，发送服务器接收到的请求
1. POST请求：Store:平台编号(A9平台上的设备该值为1) beep: 如何操作（0：关闭，1：打开）
2. 基于参数拼接消息
3. 采用消息队列发送该消息
4. 返回html报文相应。（模式固定）

*/

#define N 8

int cgiMain() 
{
	key_t key;
	int msgid;
	struct msg msg_buf;

	//存储消息内容
	char buf[QUEUE_MSG_LEN];
	//存储平台编号（A9: 1 ; Zigbee: 0）
	char sto_no[2];

	memset(&msg_buf,0,sizeof(msg_buf));
	
	//获取HTML表单里的数据 store:代表平台编号；led:代表获取的值
	cgiFormString("beep",buf,N);
	cgiFormString("store",sto_no,2);

	fprintf(stdout, "html-monitor buf : %s\n", buf);
	fprintf(stdout, "html-monitor store : %s\n", sto_no);

	//获取消息队列msgid, key的规则与process-monitor监控程序保持一致
	if((key = ftok("/tmp", 'g')) < 0)
	{
		perror("ftok");
		exit(1);
	}
	if((msgid = msgget(key, 0666)) < 0)
	{
		perror("msgget");
		exit(1);
	}

	bzero (msg_buf.text, sizeof (msg_buf.text));

	//按照ReadMe预先定义的规则生成消息内容
	//0x40		1号-A9/A53平台
	//0x10	蜂鸣器	0x00	关闭
	//			    0x01	打开
	if (buf[0] == '1'){
		
		//打开蜂鸣器 0101 0001  0x51
		msg_buf.text[0] = ((sto_no[0] - 48)) << 6 | (1 << 4) | (1 << 0);
	
	}else{

		//关闭蜂鸣器 0101 0000 0x50
		msg_buf.text[0] = ((sto_no[0] - 48)) << 6 | (1 << 4) | (0 << 0);

	}

	//组装消息
	//第一个家
	msg_buf.type = 1L;
	//1L：LED控制
	msg_buf.msgtype = 2L;

	//发送消息
	fprintf(stdout, "html-monitor  msgType : %d\n", msg_buf.msgtype);
	fprintf(stdout, "html-monitor  msgText : %x\n", msg_buf.text[0]);

	msgsnd(msgid, &msg_buf,sizeof(msg_buf)-sizeof(long),0);

	cgiHeaderContentType("text/html\n\n"); 
	fprintf(cgiOut, "<HTML><HEAD>\n"); 
	fprintf(cgiOut, "<TITLE>My CGI</TITLE></HEAD>\n"); 
	fprintf(cgiOut, "<BODY>"); 
	fprintf(cgiOut, "<H2>send sucess</H2>");
	fprintf(cgiOut, "<meta http-equiv=\"refresh\" content=\"1;url=../a9_zigbee%c.html\">", sto_no[0]);
	fprintf(cgiOut, "</BODY>\n"); 
	fprintf(cgiOut, "</HTML>\n"); 


	return 0; 
} 
